Basit karar yapısı ve blok kaydırma

Programınızın her zaman değil, bazı şartlar gerçekleştiğinde işletmesini istediğiniz komutlar olur sık sık. Bu amaçla if yapısını kullanırız.


In [2]:
sayi = 15
tahmin = input("Tahmin: ")
if sayi == tahmin:
    print "Doğru!"


Tahmin: 15
Doğru!

Bu kod parçasını çalıştırıp 15'den farklı bir sayı verdiğinizde herhangi bir mesaj çıkmayacak, ama 15 verdiğinizde Doğru! yazacak. Dikkat edilecek noktalar:

  • if kelimesinin ardından bir şart (sayi eşittir tahmin) gelmeli.
  • eşitlik şartı için çift eşit işareti (==) kullanırız. Tek eşit (=) değişken ataması demektir.
  • Şarttan sonra iki-nokta-üstüste (:) koymak gerek.
  • Şart doğruysa işletilecek olan komutlar if bloku olarak bilinir. Blokların kaydırılması zorunludur.

Blok kaydırmasını (indentation) bazı editörler (IPython Notebook gibi) otomatik olarak yapar. Aksi takdirde kendiniz yapmalısınız. Kaydırma miktarı önemli değil, bir boşluk bile olur, ama aynı blok içinde tutarlı olmalı. Okunaklıklık için programcılar genel olarak Tab tuşuyla dört boşlukluk kaydırmayı benimsemiştir.

Doğru kaydırma yapılmazsa blok yapısı bozulur ve program yanlış çalışır. Sözgelişi:


In [ ]:
sayi = 15
tahmin = input("Tahmin: ")
if sayi == tahmin:
    print "Doğru!"
    print "Bravo!"

Bu program sadece yapılan tahmin doğruysa Bravo! yazar. Buna karşılık:


In [ ]:
sayi = 15
tahmin = input("Tahmin: ")
if sayi == tahmin:
    print "Doğru!"
print "Bravo!"

Bu program tahmin doğru olsa da olmasa da Bravo! yazar, çünkü ikinci print komutu ilk kaydırma seviyesinden başlatıldığı için, if blokunun dışında kaldı.

İki ayrı dal: if-else yapısı

Yanlış tahminde bulunduğumuzda da programımızın bir tepki vermesini istiyorsak, if ile beraber else kullanırız.


In [4]:
sayi = 15
tahmin = input("Tahmin: ")
if sayi == tahmin:
    print "Doğru!"
else:
    print "Yanlış!"


Tahmin: 12
Yanlış!

Dikkat edilecek noktalar:

  • if ve else kelimeleri aynı komutun parçasıdırlar. Aynı hizada olmalıdırlar.
  • else'den sonra bir şart gelmez. else bloku yukarıdaki şartın yanlış olduğu durumda çalışır sadece.
  • if tek başına kullanılabilir, ama else kullanılamaz. Her else'in bir if'e bağlı olması gerekir.

Ardışık kararlar: if-elif-else yapısı

Şimdi if komutunun en genel haline bakacağız. elseden sonra tekrar bir if kullanmamızın gerektiği durumları elif ifadesiyle sadeleştirebiliriz. Diyelim, öğrencilerin sayısal notlarını alıp harf notları veren bir program yazıyoruz. Ölçeğimiz şöyle olsun:

  • 0-50 arası F
  • 51-65 arası D
  • 66-80 arası C
  • 81-90 arası B
  • 91-100 arası A

In [7]:
n = input("Notu girin: ")
if n < 0 or n > 100:
    print "Geçersiz not"
elif n <= 50:
    print "F"
elif n <= 65:
    print "D"
elif n <= 80:
    print "C"
elif n<=90:
    print "B"
else:
    print "A"


Notu girin: 89
B

Aynı programı sadece if ve else kullanarak da yazabiliriz, ama ardarda kaydırmalar yüzünden daha zor anlaşılır.


In [ ]:
n = input("Notu girin: ")
if n < 0 or n > 100:
    print "Geçersiz not"
else: 
    if n <= 50:
        print "F"
    else:
        if n <= 65:
            print "D"
        else:
            if n <= 80:
                print "C"
            else:
                if n<=90:
                    print "B"
                else:
                    print "A"

Üçlü if ifadesi

Birçok kez bir değişkene belli bir şartın doğruluğuna veya yanlışlığına göre bir değer atamamız gerekir. Mesela:


In [10]:
a = 3
if a < 5:
    x = "falan"
else:
    x = "filan"
print x


falan

Bunu daha kısa yoldan üçlü if ifadesi ile sağlarız:


In [9]:
x = "falan" if a < 5 else "filan"
print x


falan

Daha somut olarak, bir sayının mutlak değerini almak için:


In [11]:
x = -3
x = -x if x<0 else x
print x


3

Üçlü if ifadesi bir değer geri verdiği için, if-else blokunun dil kuralları gereği kullanılamadığı yerlerde kullanılabilir, kod yazma esnekliği sağlar.

Bu üçlü yapıda elif yoktur ama içiçe kararlar verilebilir. Sözgelişi, hava sıcaklığı 15C altındaysa "soğuk", 15C-25C arasındaysa "ılık", 25C üstündeyse "sıcak" veren bir ifade yazalım.


In [16]:
s = input("Sıcaklık: ")
mesaj = "hava soğuk" if s < 15 else "hava ılık" if s < 25 else "hava sıcak"
print mesaj


Sıcaklık: 19
hava ılık

In [ ]: